import { Message } from 'element-ui'
import { userLogin,fetchUserInfo } from '@/axios/api.user.js';
import util from '@/libs/util'

export default {
	namespaced: true,
	state: {
		userInfo:{},
	},
	mutations: {
		// 设置用户信息
		SET_USERINFO(state, o = {}) {
			state.userInfo = {...o}
		},
		// 退出登录
		EXIT_LOGIN(state) {
			util.cookies.remove('token') // 删除token(以token为登录状态)
			state.userInfo = {} // 清空用户信息
		}
	},
	actions: {
		// 登录
		/** 注意，如果这里出现成功和失败状态同时出现的情况，可能是webpack增量打包出乱子，重新启动项目 */
		userLogin({ commit, dispatch }, { username, password }) {
			commit('SET_LOAIND', true, { root:true })
			return new Promise((resolve,reject) => {
				userLogin({
					username,
					password
				}).then(res => {
					console.log('登录返回res:',res)
					if(res.resultFlag == false){
						Message.error(res.resultMsg)
					}else if(res.data.token){
                        Message({ message: '成功登录！', type: 'success' })
                        util.cookies.set('token', res.data.token, { expires: 30 })
						// 不要在这里加载 ，不然在请求里面就可以看到所有菜单信息
                        // dispatch('getMenuList',{},{ root:true })//加载菜单数据
						let _userInfo = {
                        	id         : res.data.id,
							token      : res.data.token,
							userName   : res.data.userName,
							// purview    : res.data.purview, //如果用户没有这个字段，前端会报错，登录时跳转不了
							// welcomePage: res.data.welcomePage, // 如果用户没有这个字段，前端会报错，登录时跳转不了
						}
						console.log('用户登录后的信息：',_userInfo)
						commit('SET_USERINFO',_userInfo)
                        commit('SET_LOAIND', false, { root:true })//loading效果
                        resolve()
					}else{
                        Message.error('没有返回有效token,登录失败！')
                        commit('SET_LOAIND', false, { root:true })//loading效果
                        reject(err)
					}

				}).catch(err => {
					Message.error('登录请求失败了。。。')
					commit('SET_LOAIND', false, { root:true })//loading效果
					reject(err)
				})
			})
		},
		// 退出登录
		exitLogin({ commit,dispatch }) {
			commit('EXIT_LOGIN')
			commit('tab/WORKTAB_EXITLOGIN',{},{ root: true }) // 即使在根节点，调用模块的方法也要指定执行上下文：root:true
			return Promise.resolve()
		},
		// 获取用户信息
		getUserInfo({ commit }) {
			fetchUserInfo()
				.then(res => {
				console.log('成功拉取用户信息：',res);
				commit('SET_USERINFO',res)
			}).catch(err => {
				console.log(err)
			})
		}
	}
}
